package web.produitcatalogue;

import java.util.Date;
import java.util.List;

import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import persistence.offre.OffreDeProduit;
import persistence.produitcatalogue.ProduitCatalogue;
import persistence.produitcatalogue.configuration.Accessoire;
import persistence.produitcatalogue.configuration.Couleur;
import persistence.produitcatalogue.configuration.Marque;
import persistence.produitcatalogue.configuration.Stockage;
import persistence.produitcatalogue.configuration.SystemeExploitation;
import persistence.produitcatalogue.configuration.Taille;
import persistence.util.HibernateUtil;
import persistence.utilisateur.Client;

import web.HomePage;
import web.Template;

/**
 * 
 * @author Guillaume
 *
 */
public class FaireProduitCatalogue extends Template{
	
	private Form<?> form;
	
	private ProduitCatalogue pc;
	
	private List<Accessoire> listeAccessoire;
	private List<Couleur> listeCouleur;
	private List<Marque> listeMarque;
	private List<Stockage> listeStockage;
	private List<SystemeExploitation> listeSystemeExploitation;
	private List<Taille> listeTaille;
	
	private Query query;
	
	private Accessoire accessoire;
	private Couleur couleur;
	private Marque marque;
	private Stockage stockage;
	private SystemeExploitation systemeExploitation;
	private Taille taille;
	
	private DropDownChoice ddcAccessoire;
	private DropDownChoice ddcCouleur;
	private DropDownChoice ddcMarque;
	private DropDownChoice ddcStockage;
	private DropDownChoice ddcSystemeExploitation;
	private DropDownChoice ddcTaille;
	
	private ChoiceRenderer<Accessoire> crAccessoire;
	private ChoiceRenderer<Couleur> crCouleur;
	private ChoiceRenderer<Marque> crMarque;
	private ChoiceRenderer<Stockage> crStockage;
	private ChoiceRenderer<SystemeExploitation> crSystemeExploitation;
	private ChoiceRenderer<Taille> crTaille;
	
	public FaireProduitCatalogue()
	{
		super();
		pc = new ProduitCatalogue();
		form = new Form<Object>("form", new CompoundPropertyModel(pc))
		{
			public void onSubmit()
			{
				SessionFactory sf = HibernateUtil.getSessionFactory();
				Session session = sf.openSession();
				
				Transaction tc = session.beginTransaction();
				ProduitCatalogue pcACommit = (ProduitCatalogue) this.getModelObject();
				// On initialise Date à la date du jour
				pcACommit.setDateMiseEnLigne(new Date());
				// On affiche pas le produit de base
				pcACommit.setVisibilite(0);
				// On définit le prix à 0
				pcACommit.setPrix(0);
				//On définit le stock à 0
				pcACommit.setStockProduit(0);
				// On enregistre
				session.save(pcACommit);
				// On commit
				tc.commit();
				session.close();
				setResponsePage(new HomePage("Accueil"));
			}
		};
		// TextField
		form.add(new TextField("libelle"));
		form.add(new TextArea("description"));
		form.add(new TextField("RAM"));
		form.add(new TextField("poids"));
		
		// Création et técupération requetes configs
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		query = session.createQuery("Select a from Accessoire a");
		listeAccessoire = query.list();
		query = session.createQuery("Select c from Couleur c");
		listeCouleur = query.list();
		query = session.createQuery("Select m from Marque m");
		listeMarque = query.list();
		query = session.createQuery("Select s from Stockage s");
		listeStockage = query.list();
		query = session.createQuery("Select se from SystemeExploitation se");
		listeSystemeExploitation = query.list();
		query = session.createQuery("Select t from Taille t");
		listeTaille = query.list();
		// fermeture session
		session.close();
		// Création listes déroulantes
		// ACCESSOIRE
		accessoire = new Accessoire();
		crAccessoire = new ChoiceRenderer<Accessoire>()
		{
			public String getDisplayValue(Accessoire a)
			{
				return a.getLibelle();
			}
		};
		ddcAccessoire = new DropDownChoice<Accessoire>("accessoire",  
				listeAccessoire, crAccessoire);
		// COULEUR
		couleur = new Couleur();
		crCouleur = new ChoiceRenderer<Couleur>()
		{
			public String getDisplayValue(Couleur c)
			{
				return c.getLibelle();
			}
		};
		ddcCouleur = new DropDownChoice<Couleur>("couleur", 
				listeCouleur, crCouleur);
		// MARQUE
		marque = new Marque();
		crMarque = new ChoiceRenderer<Marque>()
		{
			public String getDisplayValue(Marque m)
			{
				return m.getLibelle();
			}
		};
		ddcMarque = new DropDownChoice<Marque>("marque", 
				listeMarque, crMarque);
		// STOCKAGE
		stockage = new Stockage();
		crStockage = new ChoiceRenderer<Stockage>()
		{
			public String getDisplayValue(Stockage s)
			{
				return s.getLibelle();
			}
		};
		ddcStockage = new DropDownChoice<Stockage>("stockage",  
				listeStockage, crStockage);
		// SYSTEME EXPLOITATION
		systemeExploitation = new SystemeExploitation();
		crSystemeExploitation = new ChoiceRenderer<SystemeExploitation>()
		{
			public String getDisplayValue(SystemeExploitation se)
			{
				return se.getLibelle();
			}
		};
		ddcSystemeExploitation = new DropDownChoice<SystemeExploitation>("systemeExploitation", 
				listeSystemeExploitation, crSystemeExploitation);
		// TAILLE
		taille = new Taille();
		crTaille = new ChoiceRenderer<Taille>()
		{
			public String getDisplayValue(Taille t)
			{
				return t.getLibelle();
			}
		};
		ddcTaille = new DropDownChoice<Taille>("taille", 
				listeTaille, crTaille);
		// AJOUT
		
		form.add(ddcAccessoire);
		form.add(ddcCouleur);
		form.add(ddcMarque);
		form.add(ddcStockage);
		form.add(ddcSystemeExploitation);
		form.add(ddcTaille);
		add(form);
	}// FIN CONSTRUCTEUR
}
